/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package control;

import control.filtros.FiltroPrestacionesNombre;
import control.comparaciones.ComparacionIniciaCon;
import control.filtros.Filtro;
import control.filtros.FiltroCargosNombre;
import control.filtros.FiltroDepartamentoNombre;
import control.filtros.FiltroEmpleadoNombre;
import entidad.Candidato;
import entidad.Cargo;
import entidad.Departamento;
import entidad.Empleado;
import entidad.Horario;
import entidad.HorarioDia;
import entidad.Prestacion;
import frontera.interfaz.Tupla;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author tuareg
 */
public class Inicializacion {

	Calendar cal = Calendar.getInstance();

	public Inicializacion() {
	}

	@BeforeClass
	public static void setUpClass() throws Exception {
	}

	@AfterClass
	public static void tearDownClass() throws Exception {
	}

	@Before
	public void setUp() {
	}

	@After
	public void tearDown() {
	}
	// TODO add test methods here.
	// The methods must be annotated with annotation @Test. For example:
	//
	@Test
	public void iniciarDatosDepartamentos() {
		Departamento dep = new Departamento(1, "Recursos Humanos");

		Departamento    comercial = new Departamento(1, "Comercial"),
                                financiero = new Departamento(2, "Financiero"),
                                produccion = new Departamento(3, "Producción"),
                                administrativo = new Departamento(4, "Administrativo"),
                                logistica = new Departamento(5, "Logística"),
                                servCliente = new Departamento(6, "Servicio al Cliente");

                assertTrue(SIRHApp.getInstance().getSistema().agregarDepartamento(dep));
		assertTrue(SIRHApp.getInstance().getSistema().agregarDepartamento(comercial));
		assertTrue(SIRHApp.getInstance().getSistema().agregarDepartamento(financiero));
		assertTrue(SIRHApp.getInstance().getSistema().agregarDepartamento(produccion));
		assertTrue(SIRHApp.getInstance().getSistema().agregarDepartamento(administrativo));
		assertTrue(SIRHApp.getInstance().getSistema().agregarDepartamento(logistica));
		assertTrue(SIRHApp.getInstance().getSistema().agregarDepartamento(servCliente));
	}
	
	@Test
	public void iniciarDatosCargos() {
                Calendar tmpFecha = new GregorianCalendar(2010, 4, 11);
		Horario horarioTMP;		
		Tupla<Filtro<Departamento>, String> tmp = new Tupla<Filtro<Departamento>, String>(new FiltroDepartamentoNombre(), "Comercial");
		ArrayList<Tupla<Filtro<Departamento>, String>> info = new ArrayList<Tupla<Filtro<Departamento>, String>>();
		info.add(tmp);
		Departamento dep = SIRHApp.getInstance().getDAODepartamento().buscar(info, new ComparacionIniciaCon()).get(0);
		//Puede "ver" todo//Posibles estados en ves de Activo: EnProceso, Ocupado, Vacante
		horarioTMP = horarioAleatorio();
                Cargo cargoTMP = new Cargo( "Gerente General", horarioTMP, "1500000", dep, "Vacante", "Gerente",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);
		//Puede "ver" solo la parte de candidatos
		horarioTMP = horarioAleatorio();
                cargoTMP = new Cargo( "Sicologo", horarioTMP, "1500000", dep, "Ocupado", "Reclutamiento",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);

		//Puede "ver" solo la parte de Fallas
		horarioTMP = horarioAleatorio();
		cargoTMP = new Cargo("Coordinador", horarioTMP, "7000000", dep, "Vacante", "Coordinador",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);

		//Puede "ver" solo la parte de Reportes de Nomina
		horarioTMP = horarioAleatorio();
		cargoTMP = new Cargo( "Auxiliar Contable", horarioTMP, "16000000", dep, "En Proceso", "Auxiliar",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);

		//Cargo que inicia bloqueado para pruebas en cambios de estado de empleados
		horarioTMP = horarioAleatorio();
		cargoTMP = new Cargo( "Vigilante", horarioTMP, "1300000", dep,"Bloqueado", "Ninguno",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);

		horarioTMP = horarioAleatorio();
		cargoTMP = new Cargo("Cajero nocturno", horarioTMP, "10000000", dep, "En Proceso", "Ninguno",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);

		horarioTMP = horarioAleatorio();
		cargoTMP = new Cargo( "Bodeguero", horarioTMP, "10000000", dep , "En Proceso","Ninguno",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);

		horarioTMP = horarioAleatorio();
		cargoTMP = new Cargo( "Aseador", horarioTMP, "10000000", dep, "En Proceso", "Gerente",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);

		horarioTMP = horarioAleatorio();
		cargoTMP = new Cargo( "Supervisor", horarioTMP, "10000000", dep, "Vacante", "Coordinador",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);

		horarioTMP = horarioAleatorio();
		cargoTMP = new Cargo( "Pasante      ", horarioTMP, "1300000", dep, "Ocupado", "Ninguno",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);

		horarioTMP = horarioAleatorio();
		cargoTMP = new Cargo( "Prueba dos  ", horarioTMP, "1300000", dep, "En Proceso", "Ninguno",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);

		horarioTMP = horarioAleatorio();
		cargoTMP = new Cargo("Prueba tres  ", horarioTMP, "1300000", dep, "En Proceso", "Ninguno",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);

		horarioTMP = horarioAleatorio();
		cargoTMP = new Cargo("Prueba cuatro  ", horarioTMP, "1300000", dep, "Vacante", "Ninguno",tmpFecha);
		SIRHApp.getInstance().getDAOCargo().crear(cargoTMP);
	}
	
	@Test
	public void iniciarDatosEmpleados() {

		Empleado empleado = new Empleado("Nombre Empleado", "11111111", (long) 34092313, "algunaParte", "programador", "Activo", 13, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Aseador").get(0), "EPSCas", cal);
		Empleado olarte = new Empleado("Oscar Olarte", "102444424", 7625252, "Avenida siempre viva 123", "Abogado", "Jubilado", (float) 150.0, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Gerente General").get(0), "EPSCas", cal);
		Empleado restrepo = new Empleado("Nicolas Restrepo", "102271324", 7625270, "Calle falsa 123", "Abogado", "Jubilado", (float) 150.0, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Sicologo").get(0), "EPSAqr", cal);
		Empleado otalora = new Empleado("Sebastian Otalora", "1014205103", 4340178, "Tv 67 Nº 69-96", "Ingeniero", "Vacaciones", (float) 150.0, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Coordinador").get(0), "Compensar", cal);
		Empleado perez = new Empleado("Santiago Perez", "100000003", 41101578, "Tv 1001 Nº 101-11", "Profesor", "Incapacidad", (float) 150.0, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Auxiliar Contable").get(0), "Cafesalud", cal);
		Empleado rodriguez = new Empleado("Sebastian Rodriguez", "10252543", 45512454, "Cll 95 Nº 11-96", "Arquitecto", "Activo", (float) 150.0, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Sicologo").get(0), "Cafesalud", cal);

                SIRHApp.getInstance().getSistema().agregarEmpleado(empleado);                
		SIRHApp.getInstance().getSistema().agregarEmpleado(olarte);
		SIRHApp.getInstance().getSistema().agregarEmpleado(restrepo);
		SIRHApp.getInstance().getSistema().agregarEmpleado(otalora);
		SIRHApp.getInstance().getSistema().agregarEmpleado(perez);
		SIRHApp.getInstance().getSistema().agregarEmpleado(rodriguez);

		SIRHApp.getInstance().getSistema().agregarEmpleado(new Empleado("Rosa Rojas", "98178555", (long) 4340188, "Avenida del Bosque #19-35", "Administradora de Empresas", "Jubilado", (float) 1.0, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Gerente General").get(0), "Colsanitas", cal));
		SIRHApp.getInstance().getSistema().agregarEmpleado(new Empleado("Rene Segura", "7865412", (long) 987456321, "Avenida New Orland# 7-30", "Fisico", "Activo", (float) 10.0, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Coordinador").get(0), "Colsanitas", cal));
		SIRHApp.getInstance().getSistema().agregarEmpleado(new Empleado("Carolina Cantor",  "8754123", (long) 5468421, "Cll 79 #5-26", "Biologa", "Vacaciones", (float) 10.0, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Auxiliar Contable").get(0), "Colsanitas", cal));
		SIRHApp.getInstance().getSistema().agregarEmpleado(new Empleado("Andres Cantor",  "87542312", (long) 5268421, "Cll 49 #7-26", "Estudiante", "Despedido", (float) 10.0, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Pasante      ").get(0), "Colsanitas", cal));
		SIRHApp.getInstance().getSistema().agregarEmpleado(new Empleado("Andres Murcia",  "87544312", (long) 4568421, "Cll 56 #7-26", "Estudiante", "Activo", (float) 10.0, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Prueba dos  ").get(0), "Colsanitas", cal));
		SIRHApp.getInstance().getSistema().agregarEmpleado(new Empleado("Camilo Salcedo", "54665454", (long) 4458421, "Cll 78 #5-78", "Estudiante", "Despedido", (float) 10.0, SIRHApp.getInstance().getAdmCargos().buscar(new FiltroCargosNombre(), new ComparacionIniciaCon(), "Prueba tres  ").get(0), "Colsanitas", cal));

        }

	@Test
	public void iniciarDatosEmpleadosAntiguos() {
                Tupla<Filtro<Cargo>, String> tmp = new Tupla<Filtro<Cargo>, String>(new FiltroCargosNombre(), "");
		ArrayList<Tupla<Filtro<Cargo>, String>> info = new ArrayList<Tupla<Filtro<Cargo>, String>>();
		info.add(tmp);
		Cargo car = SIRHApp.getInstance().getDAOCargo().buscar(info, new ComparacionIniciaCon()).get(0);
		
		Calendar tmpFecha = new GregorianCalendar(2011, 3, 12);
		Empleado emp = new Empleado("Francisco Rodriguez", "102232424", 7678612, "Cll 82 #32 - 54", "Diseñador Grafico", "Activo", (float) 110.0, car, "Fersalud", tmpFecha);
		SIRHApp.getInstance().getSistema().agregarEmpleado(emp);
                
                car = SIRHApp.getInstance().getDAOCargo().buscar(info, new ComparacionIniciaCon()).get(1);
		emp = new Empleado("Rocio Martinez Agudelo", "122876984", 4665112, "Cll 42 #97 - 14", "Ingeniera Civil", "Activo", (float) 130.0, car, "Fersalud", tmpFecha);
		SIRHApp.getInstance().getSistema().agregarEmpleado(emp);

		tmpFecha = new GregorianCalendar(2010, 4, 11);
                car = SIRHApp.getInstance().getDAOCargo().buscar(info, new ComparacionIniciaCon()).get(4);
		emp = new Empleado("Alejandra Carvajal Salazar", "154443123", 2645467, "Cll 24 #92 - 14", "Geologa", "Despedido", (float) 130.0, car, "Colsanitas", tmpFecha);
		SIRHApp.getInstance().getSistema().agregarEmpleado(emp);

                car = SIRHApp.getInstance().getDAOCargo().buscar(info, new ComparacionIniciaCon()).get(6);
		emp = new Empleado("Leonardo Mayorga Salinas", "1012534678", 4326698, "Cll 12 #12 - 34", "Economista", "Activo", (float) 100.0, car, "Colsanitas", tmpFecha);
		SIRHApp.getInstance().getSistema().agregarEmpleado(emp);

	}
        @Test
	public void iniciarDatosCandidatos() {                
                Tupla<Filtro<Cargo>, String> tmp = new Tupla<Filtro<Cargo>, String>(new FiltroCargosNombre(), "");
		ArrayList<Tupla<Filtro<Cargo>, String>> info = new ArrayList<Tupla<Filtro<Cargo>, String>>();
		info.add(tmp);
                Cargo car = SIRHApp.getInstance().getDAOCargo().buscar(info, new ComparacionIniciaCon()).get(6);
                Candidato cand = new Candidato("asddfghjk", "1234567890", "asdfgh", "1234567", "asdfghj", car);
                SIRHApp.getInstance().getDAOCandidato().crear(cand);
		SIRHApp.getInstance().getAdmCandidatos().crearCandidato("Mario Bros", "789456123", "Fontanero", "538600", "Descartado", car);
		SIRHApp.getInstance().getAdmCandidatos().crearCandidato("Pepito Perez", "1014205999", "Administrador de Bases de datos", "5000000", "Pendiente", car);
		car = SIRHApp.getInstance().getDAOCargo().buscar(info, new ComparacionIniciaCon()).get(8);
                SIRHApp.getInstance().getAdmCandidatos().crearCandidato("Andrea Aparicio", "14205101", "Contador", "1000000", "Para entrevista", car);
		SIRHApp.getInstance().getAdmCandidatos().crearCandidato("Henry Umaña", "142051013", "Contador", "1000000", "Descartado", car);
	}

	@Test
	public void iniciarDatosUsuarios() {


		SIRHApp.getInstance().getAdmUsuarios().crearUsuario("OscarDaniel", "olartefuentes", SIRHApp.getInstance().getAdmEmpleados().buscar(new FiltroEmpleadoNombre(), new ComparacionIniciaCon(), "Oscar Olarte").get(0));
		SIRHApp.getInstance().getAdmUsuarios().crearUsuario("NicolasEstefano", "restrepo", SIRHApp.getInstance().getAdmEmpleados().buscar(new FiltroEmpleadoNombre(), new ComparacionIniciaCon(), "Nicolas Restrepo").get(0));
		SIRHApp.getInstance().getAdmUsuarios().crearUsuario("SebastianO", "sotalora", SIRHApp.getInstance().getAdmEmpleados().buscar(new FiltroEmpleadoNombre(), new ComparacionIniciaCon(), "Sebastian Otalora").get(0));
		SIRHApp.getInstance().getAdmUsuarios().crearUsuario("Santiago", "sanperez", SIRHApp.getInstance().getAdmEmpleados().buscar(new FiltroEmpleadoNombre(), new ComparacionIniciaCon(), "Santiago Perez").get(0));
		SIRHApp.getInstance().getAdmUsuarios().crearUsuario("SebastianR", "rodriguez", SIRHApp.getInstance().getAdmEmpleados().buscar(new FiltroEmpleadoNombre(), new ComparacionIniciaCon(), "Sebastian Rodriguez").get(0));
		SIRHApp.getInstance().getAdmUsuarios().crearUsuario("GerenteGral", "11111111", SIRHApp.getInstance().getAdmEmpleados().buscar(new FiltroEmpleadoNombre(), new ComparacionIniciaCon(), "Nombre Empleado").get(0));
	}

	

	public Horario horarioAleatorio() {
		Horario hor = new Horario();
		ArrayList<HorarioDia> horariodias = new ArrayList<HorarioDia>();
		hor.setHorario(horariodias);
                SIRHApp.getInstance().getDAOHorario().crear(hor);
		for (int i = 0; i < 7; i++) {
			int inicio = (int) (Math.random() * 10) + 1;
			int duracion = (int) (Math.random() * 10) + 1;

			HorarioDia hDias = new HorarioDia(i, inicio, inicio + duracion);
			horariodias.add(hDias);

			hDias.setHorario(hor);
			SIRHApp.getInstance().getDAOHorarioDia().crear(hDias);
		}
		hor.setHorario(horariodias);
		return hor;
	}

	@Test
	public void iniciarDatosPrestaciones() {
                Calendar tmpFecha = new GregorianCalendar(2010, 4, 11);                
		Prestacion horaDiurna = new Prestacion(1, "Hora Diurna", "1.25","0", tmpFecha),
			horaNoct = new Prestacion( 2, "Hora Nocturna", "1.5", "0", tmpFecha),
			horaFest = new Prestacion( 3, "Hora Festiva", "2.0", "0", tmpFecha),
			horaFestNoct = new Prestacion( 4, "Hora Festiva N","2.5", "0", tmpFecha),
			auxTrans = new Prestacion( 5, "Auxilio de Transporte", "65000", "0", tmpFecha),
			salarioMin = new Prestacion( 6, "Salario Minimo", "300000", "0", tmpFecha),
			salud = new Prestacion( 7, "Salud", "4", "8.5", tmpFecha),
			pension = new Prestacion( 8, "Pension", "4", "12", tmpFecha),
			arp = new Prestacion( 9, "ARP", "0", "8", tmpFecha),
			sena = new Prestacion( 10, "Sena", "0", "2", tmpFecha),
			icbf = new Prestacion( 11, "ICBF", "0", "3", tmpFecha),
			cajas = new Prestacion( 12, "Cajas Compensacion", "0", "4", tmpFecha);

		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(horaDiurna));
		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(horaNoct));
		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(horaFest));
		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(horaFestNoct));
		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(auxTrans));
		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(salarioMin));
		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(salud));
		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(pension));
		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(arp));
		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(sena));
		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(icbf));
		assertTrue(SIRHApp.getInstance().getSistema().agregarPrestacion(cajas));

	}

	@Test
	public void inicializarCambios() {

            Tupla<Filtro<Empleado>, String> tmpEmpleado = new Tupla<Filtro<Empleado>, String>(new FiltroEmpleadoNombre(),"Francisco Rodriguez");
            ArrayList<Tupla<Filtro<Empleado>, String>> info = new ArrayList<Tupla<Filtro<Empleado>, String>>();
            info.add(tmpEmpleado);
            ArrayList<Empleado> cambios = SIRHApp.getInstance().getDAOEmpleado().buscar(info, new ComparacionIniciaCon());

            Empleado empleadoTMP = SIRHApp.getInstance().getAdmCambios().getEmpMayorFecha(cambios);
            Empleado nuevoEmp = new Empleado(   empleadoTMP.getNombre()+"Qwerty",
                                                empleadoTMP.getCedula(),
                                                empleadoTMP.getTelefono(), 
                                                empleadoTMP.getDireccion(), 
                                                empleadoTMP.getProfesion(), 
                                                empleadoTMP.getEstado(), 
                                                empleadoTMP.getPorcentajeSalarioBas(), 
                                                empleadoTMP.getCargoAsociado(), 
                                                "EPS mia", 
                                                cal);
            
            SIRHApp.getInstance().getDAOEmpleado().actualizar(empleadoTMP, nuevoEmp);
            
            
            
  /*          
            Tupla<Filtro<Cargo>, String> tmpCargo = new Tupla<Filtro<Cargo>, String>(new FiltroCargosNombre(),"Sicologo");
            ArrayList<Tupla<Filtro<Cargo>, String>> infoCar = new ArrayList<Tupla<Filtro<Cargo>, String>>();
            infoCar.add(tmpCargo);
            ArrayList<Cargo> cambiosCar = SIRHApp.getInstance().getDAOCargo().buscar(infoCar, new ComparacionIniciaCon());

            Cargo carTMP = SIRHApp.getInstance().getAdmCambios().getCarMayorFecha(cambiosCar);
            Cargo nuevoCar = new Cargo( carTMP.getNombre()+"Qwerty", 
                                        carTMP.getHorario(),
                                        "1",
                                        carTMP.getDepartamento(), 
                                        carTMP.getEstado(), 
                                        carTMP.getNivelPermisos(),
                                        cal);
            
            SIRHApp.getInstance().getDAOCargo().actualizar(carTMP, nuevoCar);
*/            
            Tupla<Filtro<Prestacion>, String> tmpPrestacion = new Tupla<Filtro<Prestacion>, String>(new FiltroPrestacionesNombre(),"Hora Diurna");
            ArrayList<Tupla<Filtro<Prestacion>, String>> infoPres = new ArrayList<Tupla<Filtro<Prestacion>, String>>();
            infoPres.add(tmpPrestacion);
            ArrayList<Prestacion> cambiosPres = SIRHApp.getInstance().getDAOPrestacion().buscar(infoPres, new ComparacionIniciaCon());

            Prestacion presTMP = SIRHApp.getInstance().getAdmCambios().getPresMayorFecha(cambiosPres);
            Prestacion nuevaPres = new Prestacion(  presTMP.getIdPrestacion(), 
                                                    presTMP.getNombre(),
                                                    presTMP.getPorcentajeEmpleado(), 
                                                    presTMP.getPorcentajeCompañia(), 
                                                    cal);
            SIRHApp.getInstance().getDAOPrestacion().actualizar(presTMP, nuevaPres);
            
        }


}
